package com.bankcomm.luafuction;

import org.keplerproject.luajava.LuaException;
import org.keplerproject.luajava.LuaObject;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;

import com.bankcomm.common.ConfigManager;
import com.rytong.tools.ui.Component;
import com.rytong.tools.utils.Utils;

public class LuaGPS {
	public static double LATITUDE = 0;
	public static double LONGITUDE = 0;
	static LuaObject callback;
	static LocationListener locationListener_;
	private boolean isStartGps = false;

	public LuaGPS() {
		try {
			Component.LUASTATE.pushObjectValue(this);
			Component.LUASTATE.setGlobal("luagps");

			final String luahead = "gps = {}; ";
			final String luafc1 = "function gps:startUpdateLocation() return luagps:startUpdateLocation(); end;";
			final String luafc2 = "function gps:stopUpdateLocation(gpsa) luagps:stopUpdateLocation(gpsa); end;";
			final String luafc3 = "function gps:dispose(handle) luagps:dispose(handle); end;";
			final String luafc4 = "function gps:setListener(handle, listener) luagps:setListener(handle, listener); end;";

			Component.LUASTATE.LdoString(luahead.concat(luafc1).concat(luafc2)
					.concat(luafc3).concat(luafc4));
		} catch (LuaException e) {
			// TODO Auto-generated catch block
			Utils.printException(e);
		}
	}

	/**
	 * 开启GPS功能，并更新当前位置
	 * 
	 * @return 当前开启的GPS对象
	 */
	public Object startUpdateLocation() {
		Object result = null;
//		final LocationManagerProxy alm = LocationManagerProxy
//				.getInstance(ConfigManager.currentView_);
//		if (isStartGps) {
//			startGpsListener(alm);
//		} else {
//			showOpenGPS(alm);
//		}
//		return alm;
		return result;
	}

	private void showOpenGPS(final Object alm) {
//		new AlertDialog.Builder(ConfigManager.currentView_)
//				.setTitle("提示")
//				.setMessage("应用程序需要使用定位功能，是否允许。")
//				.setPositiveButton("是", new DialogInterface.OnClickListener() {
//					public void onClick(DialogInterface dialog, int whichButton) {
//						if (LATITUDE != 0 && LONGITUDE != 0) {
//							updateCallback(LATITUDE, LONGITUDE);// 若定位过，使用之前的结果先返回一次。
//						}
//						startGpsListener(alm);
//					}
//				})
//				.setNegativeButton("否", new DialogInterface.OnClickListener() {
//					public void onClick(DialogInterface dialog, int whichButton) {
//						updateCallback(0, 0);
//					}
//				}).show();
	}

	private void startGpsListener(final Object alm) {
//		new Thread(new Runnable() {
//			public void run() {
//				listener(alm);
//			}
//		}).start();
	}

	/**
	 * 高德地图获取经纬度的监听
	 */
	public void listener(Object alm) {
//		locationListener_ = new LocationListener() {
//			public void onStatusChanged(String provider, int status,
//					Bundle extras) {
//				// TODO Auto-generated method stub
//			}
//
//			public void onProviderEnabled(String provider) {
//				// TODO Auto-generated method stub
//			}
//
//			public void onProviderDisabled(String provider) {
//				// TODO Auto-generated method stub
//			}
//
//			public void onLocationChanged(Location location) {
//				// TODO Auto-generated method stub
//				if (location != null) {
//					LATITUDE = location.getLatitude();
//					LONGITUDE = location.getLongitude();
//					updateCallback(LATITUDE, LONGITUDE);
//				}
//			}
//		};
//		try {
//			Criteria cri = new Criteria();
//			cri.setAccuracy(Criteria.ACCURACY_COARSE);
//			cri.setAltitudeRequired(false);
//			cri.setBearingRequired(false);
//			cri.setCostAllowed(false);
//			String bestProvider = alm.getBestProvider(cri, true);
//			alm.requestLocationUpdates(bestProvider, 2000, 10,
//					locationListener_);
//		} catch (Exception e) {
//		}
	}

	/**
	 * 停止更新当前位置坐标，并关闭GPS
	 */
	final public void stopUpdateLocation(Object alm) {
//		// 释放callback.
//		callback = null;
//		alm.removeUpdates(locationListener_);
	}

	/**
	 * 释放GPS对象 Object gps对象
	 */
	final public void dispose(Object o) {
//		// 释放callback.
//		callback = null;
	}

	/**
	 * 为GPS设置监听方法
	 * 
	 * @param handle
	 *            GPS对象
	 * @param listener
	 *            监听方法（function）
	 */
	final public void setListener(Object handle,LuaObject listener) {
//		callback = listener;
	}

	final void updateCallback(double latitude, double longitude) {
//		if (callback != null && callback.isFunction()) {
//			// 如果是lua则将参数代入并执行并执行
//			try {
//				loca la = new loca();
//				la.latitude = latitude;
//				la.longitude = longitude;
//				callback.call(new Object[] { la }, 0);
//			} catch (LuaException e) {
//				// TODO Auto-generated catch block
//				Utils.printException(e);
//			}
//		}
	}

	class loca {
		public double latitude = 0;
		public double longitude = 0;
	}
}
